package com.example.stmp.Service.Student;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import com.example.stmp.dto.StudentDTO;
import com.example.stmp.pojo.Tool;
import com.example.stmp.Entity.Student;
import com.example.stmp.Mapper.StudentMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 学生服务实现类
 */
@Service
@Slf4j
public class StudentImpl implements StudentService {

    /**
     * 学生数据访问对象
     */
    @Autowired
    private StudentMapper studentMapper;

    /**
     * 从Excel文件中导入学生信息
     *
     * @param file 包含学生信息的Excel文件
     * @throws IOException 如果文件读取失败
     */
    @Override
    public void importStudentsFromExcel(MultipartFile file) throws IOException {
        // 使用工具类读取Excel文件，转换为学生数据传输对象列表
        List<StudentDTO> dtoList = Tool.readExcel(file, StudentDTO.class);

        // 将学生数据传输对象列表转换为学生实体对象列表
        List<Student> students = dtoList.stream().map(dto -> {
            Student s = new Student();
            s.setStId(dto.getStId());
            s.setStName(dto.getStName());
            s.setAcId(dto.getAcId());
            s.setRole(dto.getRole());
            s.setAuth(dto.getAuth());
            s.setCreateTime(dto.getCreateTime());
            // 设置最后更新时间为当前时间
            s.setLastUpdateTime(Tool.ceareNowTime());
            return s;
        }).collect(Collectors.toList());

        // 使用学生数据访问对象批量插入学生实体对象列表
        studentMapper.batchInsert(students);
    }

    /**
     * 添加学生信息
     *
     * @param student 要添加的学生实体对象
     */
    @Override
    public void addStudent(Student student) {
        studentMapper.insertStudent(student);
    }

    /**
     * 删除学生信息
     *
     * @param stId 学生ID
     * @param status 学生状态
     */
    @Override
    public void deleteStudent(String stId, int status) {
        studentMapper.deleteStudent(stId, status);
    }

    /**
     * 更新学生信息
     *
     * @param student 要更新的学生实体对象
     */
    @Override
    public void updateStudent(Student student) {
        studentMapper.updateStudent(student);
    }

    /**
     * 根据学生ID和状态获取学生信息
     *
     * @param stId 学生ID
     * @param status 学生状态
     * @return 学生实体对象
     */
    @Override
    public Student getStudentById(String stId, int status) {
        return studentMapper.selectStudentById(stId, status);
    }

    /**
     * 获取所有学生信息
     *
     * @return 学生实体对象列表
     */
    @Override
    public List<Student> getAllStudents() {
        return studentMapper.selectAllStudents();
    }

    @Override
    public List<Student> queryStudents(String stId, String stName, String acId, String role) {
        return studentMapper.queryStudents(stId, stName, acId, role);
    }
}
